{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b6088dab",
   "metadata": {},
   "source": [
    "Readme：注意Matplotlib的Plot对象如果在Notebook中没有显式的在一个单元格中调用show()方法那么依然会触发渲染，应该将show()方法和plot的配置放置在同一个单元格。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "492ab8d5",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bfdf79f0",
   "metadata": {},
   "source": [
    "中文字体支持"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "61c6f99e",
   "metadata": {},
   "outputs": [],
   "source": [
    "def set_chinese_font(plt: \"matplotlib.pyplot\") -> None:\n",
    "    \"\"\"\n",
    "        设置中文字体\n",
    "    \"\"\"\n",
    "    import matplotlib.font_manager as fm  # 导入字体管理器模块并别名为 fm\n",
    "    from matplotlib.font_manager import FontProperties\n",
    "    # 获取系统中所有可用字体\n",
    "    font_path = fm.findSystemFonts()\n",
    "    chinese_fonts = [f for f in font_path if 'simhei' in f.lower() or 'heiti' in f.lower() or 'microsoftyahei' in f.lower()]\n",
    "    chinese_font = chinese_fonts[0]\n",
    "    font = FontProperties(fname=chinese_font) \n",
    "    font_family = font.get_name()\n",
    "    plt.rcParams[\"font.family\"] = font_family\n",
    "set_chinese_font(plt)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4990bba0",
   "metadata": {},
   "source": [
    "数据定义"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d28eab5a",
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\" \n",
    "    横坐标设置\n",
    "\"\"\"\n",
    "\n",
    "# 访问次数\n",
    "V = [50, 100, 150, 200, 250, 300]\n",
    "# 横坐标的柱状表数量\n",
    "x = np.arange(len(V)) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "04b1ef8e",
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\" \n",
    "    各个方法纵轴数据\n",
    "\"\"\"\n",
    "\n",
    "# Trendline data\n",
    "trend = [80, 79, 77, 75, 73, 72]\n",
    "\n",
    "# Methods data\n",
    "TLDP = [80, 79, 77, 75, 73, 72]\n",
    "LPPM = [78, 77, 75, 73, 71, 70]\n",
    "DPLPA = [79, 78, 76, 74, 72, 71]\n",
    "UPDP_LPP = [81, 80, 78, 76, 74, 73]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "49cdb844",
   "metadata": {},
   "outputs": [],
   "source": [
    "趋势图和柱状图设置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "cb9d43aa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\"\"\" \n",
    "    绘制趋势线\n",
    "\"\"\"\n",
    "plt.plot(x, trend, label=\"Trendline\", color=\"pink\", linestyle=\"--\")\n",
    "\n",
    "\"\"\" \n",
    "    渲染柱状图\n",
    "\"\"\"\n",
    "\n",
    "width = 0.2                                     # 柱子宽度                              \n",
    "offsets = [-1.5, -0.5, 0.5, 1.5]                # 柱子偏移量 × width 控制位置\n",
    "methods = [LPPM, DPLPA, TLDP, UPDP_LPP]\n",
    "labels = [\"LPPM\", \"DPLPA\",\"TLDP\", \"UPDP-LPP\"]\n",
    "colors = [ \"gray\", \"gray\", \"#8B0000\", \"white\"]  # 颜色\n",
    "hatches = [\"////\", \"\", \"\", \"\"]                  # 填充样式（仅LPPM用条纹）\n",
    "edgecolors = [None, None, None, \"black\"]        # 边框颜色（仅UPDP-LPP用黑色边框）\n",
    "\n",
    "# 渲染各组数据柱状图\n",
    "for i in range(4):\n",
    "    offset = offsets[i]\n",
    "    data = methods[i]\n",
    "    label = labels[i]\n",
    "    plt.bar(\n",
    "        x + offset * width,         # 柱子位置\n",
    "        data,                       # 各组数据\n",
    "        width,                      # 宽度\n",
    "        label=label,                # 图例标签\n",
    "        color=colors[i],            # 颜色\n",
    "        hatch=hatches[i],           # 填充样式\n",
    "        edgecolor=edgecolors[i],    # 边框颜色\n",
    "    )\n",
    "\n",
    "\"\"\" \n",
    "    图例和坐标轴设置\n",
    "\"\"\"\n",
    "\n",
    "# 设置横坐标刻度\n",
    "plt.xticks(x, V)\n",
    "\n",
    "# 设置纵坐标范围和刻度\n",
    "plt.ylim(0, 100)\n",
    "plt.yticks(np.arange(0, 101, 20))\n",
    "plt.ylabel(\"隐私保护水平/%\")\n",
    "plt.xlabel(\"访问次数V\")\n",
    "\n",
    "\n",
    "\"\"\" \n",
    "    plt.legend()实际上就足够了，但是这里这么显式的获取handles和labels\n",
    "    是为了方便可能的手动调整图例顺序。\n",
    "\"\"\"\n",
    "handles, labels = plt.gca().get_legend_handles_labels()\n",
    "plt.legend(handles, labels)\n",
    "\n",
    "# 优化布局\n",
    "plt.tight_layout()\n",
    "\n",
    "\"\"\" \n",
    "    渲染图例\n",
    "\"\"\"\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "my_env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
